; *** Frekvencmeter s PIC 16F876 / 16F876A - S53MV - 05.05.2007 ***

; *** Uporaba portov - takt 20MHz ***
; Analogni vhod RA0 - jakost signala preskalerja
; Analogni vhod RA1 - jakost linearnega vhoda
; Digitalni izhod RA2 - vrata FF J
; Digitalni izhod RA3 - Vrata FF / K
; Digitalni vhod RA4 - vklop linearnega vhoda
; Digitalni vhod RA5 - vklop preskalerja / 64
; Digitalni izhodi RB0-7 - LCD HD44780 D0-7
; Digitalni vhod RC0 - SteveC / Q3 + vhod ZAMAN 1.
; Digitalni vhod RC1 - SteveC / Q2
; Digitalni vhod RC2 - SteveC / Q1
; Digitalni vhod RC3 - ??SteveC / Q0
; Digitalni vhod RC4 - stikalo # 1/100
; Digitalni vhod RC5 - stikalo # 2/1
; Digitalni izhod RC6 - LCD HD44780 RS
; Digitalni izhod RC7 - LCD HD44780 E

; *** Uporaba Rama ***
; 20 CAKAJ40 Zanka
; 21 ZNAPIS, STEVIL racunanje
, 22,23 PALICA, STEVIL racunanje
; 24-28 MERIF 36 Btov odcitek
; 29 MERIF Zanka
; 2a-2d, MERIF stara 32 Btov vrednost

; 2F deset Zanka
; 30-33 DELI, deset 32-bitno stevilo
; 34 DELI ostanek
; 35 DELI Zanka
; 36-3F Deset desetisko stevilo

; Durum W 70,71 PREKIN resi
; 72 PREKIN naslednje Stanje J / K
; 73 PREKIN SteveC prekinitev / 64 ali / 100
; 74 PREKIN SteveC prekinitev / 1 ali / 10 ali / 100
; 75 PREKIN glavni SteveC prekinitev / 10
; 76,77 PREKIN Gornya dva bajta stevca

; *** Zacetek programa 4 ukazi tocno, sledi PREKIN ***
LSTE P = 16F876
ORG 0
ZACETEK ARI INIPIC; inicializacija PIC 16F876 / 16F876A
ARI INILCD; LCD HD44780 inicializacija
ARI ZNAPIS; zacenti napis ob vklopu
GOTO Zanka

; *** Prekinitve s frekvenco natancno 10kHz *** (70,71,72,73,74,75,76,77)
ORG 4
PREKIN MOVWF 70; resi B
SWAPF 3,0; resi DURUMU
MOVWF 71
NOP
Movlw 0B; Postavi TMR0 za takt 20MHz >>> $ 0B
MOVWF 1
MOVF 72,0; Postavi J / K Vrata stevca
MOVWF 5
Movlw 8; izkljuci J / K
MOVWF 72
MOVF 75,0; vklop / izklop J / K vrat stevca?
BTFSC 3,2
GOTO PREKIN1
Movlw 4; vkljuci J / K
MOVWF 72
DECFSZ 73,1; SteveC prekinitev / 64 ali / 100
GOTO PREKIN1
Movlw 40; 64
BTFSS 5,5
Movlw 64; 100
MOVWF 73
DECFSZ 74,1; SteveC prekinitev / 1 ali / 10 ali / 100
GOTO PREKIN1
Movlw 0A; 10
BTFSS 7,4
Movlw 64; 100
BTFSS 7,5
Movlw 1 1;
MOVWF 74
DECF 75,1; glavni SteveC prekinitev / 10
PREKIN1 BTFSS 0  C, 0; Prenos stevca TMR1IF?
GOTO PREKIN2
BCF 0  C, 0; resetiraj TMR1IF
INCF 76,1; povecaj Gornya dva bajta stevca 76,77
BTFSC 3,2
INCF 77,1
PREKIN2 BCF 0B, 2; resetiraj T0IF
SWAPF 71,0; obnovi DURUMU
MOVWF 3
SWAPF 70,1; obnovi B
SWAPF 70,0
RETFIE

; *** Inicializacija PIC 16F876 / 16F876A ***
INIPIC CLRF 5'tir; zacetno Stanje vrat
CLRF 6
CLRF 7
BSF 3,5; Postavi PAGE1
Movlw 80; SEENEK: 1 = / RBPU, 0 = INTEDG, 0 = T0CS, 0 = T0SE, 0 = PSA, 000 = PS2-0
MOVWF 1
Movlw 33; vhodi RA0,1,4,5, izhodi RA2,3
MOVWF 5
Movlw 0; izhodi RB0-7
MOVWF 6
Movlw 3F; vhodi RC0-5, izhodi RC6,7
MOVWF 7
Movlw 4; ADCON1: 0 = ADFM, 000, 0100 = PCFG3-0
MOVWF 1F
BCF 3,5; Postavi PAGE0
Movlw 7; T1CON: 00, 00 = T1CKPS1-0, 0 = T1OSCEN, 1 = / T1SYNC, 1 = TMR1CS, 1 = TMR1ON
MOVWF 10
Movlw 81; ADCON0: 10 = ADCS1-0, 000 = CHS2-0, 0 = GO / YAPILDI, 0, 1 = ADON
MOVWF 1F
Movlw 3; 73,74,75 sfrlama
MOVWF 73
MOVWF 74
MOVWF 75
CLRF 1; TMR0 reset
BSF 0B, 5'tir; vkljuci T0IE
BSF 0B, 7, vkljuci GIE
DN

; *** Glavni program ***
Zanka ARI IZPURA; izpisi vodoravne crtice cakanja
ARI NACIN; izpisi nacin delovanja MW, RF ali TTL
ARI jakost; A / D pretvornik za jakost
ARI MERIF; merjenje frekvence
ARI deset; pretvorba (25-28) binarno h (36-3F) desetisko
ARI FREKANSI; frekvence izpis
GOTO Zanka

; *** *** Frekvence celi.decimalni Izpis
FREKANS movlw 081; Naslov LCD Prva vrstica 2.znak
ARI UKAZ
Movlw 7; 10
BTFSS 7,4
Movlw 6; 100
BTFSS 7,5
Movlw 8; 1
BTFSC 5,5; preskaler vkljucen -1?
ADDLW 0FF
STEVIL CALL; izpisi (36-3F) desetisko, pika (W)
movlw 20
ARI ZNAK
Movlw 6B; "k"
BTFSC 5,5; preskaler vkljucen k> E?
Movlw 4D; "M"
ARI ZNAK
Movlw 48; "H"
ARI ZNAK
Movlw 7A; "Z"
ARI ZNAK
DN

; *** Izpisi (36-3F) desetisko, pika (W) *** (21,22,23)
STEVIL MOVWF 21
Movlw 0A; Zanka 10 ponavljanj
MOVWF 22
Movlw 20; zacetni presledki zamenjajo vodilne nicle
MOVWF 23
movlw 36
MOVWF 4
STEVIL1 movlw 30
MOVF 0,1; zacne nenicelna stevilka?
BTFSS 3,2
MOVWF 23
DECF 21,1; Prva izpisana Nicla pred piko?
BTFSC 3,2
MOVWF 23
MOVF 0,0
ADDWF 23,0
ARI ZNAK
Movlw 2E; decimalne pike izpis?
MOVF 21,1
BTFSC 3,2
ARI ZNAK
INCF 4,1; Zanka po stevilkah
DECFSZ 22,1
GOTO STEVIL1
DN

; *** Pretvorba (25-28) binarno h (36-3F) desetisko *** (2F, 36-3F)
Deset MOVF 25,0; prepisi h (30-33)
MOVWF 30
MOVF 26,0
MOVWF 31
MOVF 27,0
MOVWF 32
MOVF 28,0
MOVWF 33
Movlw 0A; Zanka 10 ponavljanj
MOVWF 2F
movlw 3F
MOVWF 4
DESET1 ARI DELI; deli (30-33) ostanek v z 10 (34)
MOVF 34,0
MOVWF 0
DECF 4,1
DECFSZ 2F, 1
GOTO DESET1
DN

; *** Deli (30-33) ostanek v (34) *** z 10 (30,31,32,33,34,35)
DELI CLRF 34
movlw 20
MOVWF 35
DELI1 RLF 30,1; premakni vse za 1bit v levo
RLF 31,1
RLF 32,1
RLF 33,1
RLF 34,1
BCF 30,0
Movlw 0A; 10 odstej
SUBWF 34,0
BTFSS 3,0
GOTO DELI2
MOVWF 34; kvocient blgesindeki popravi ostanek
BSF 30,0
DELI2 DECFSZ 35,1
GOTO DELI1
DN

; *** Merjenje frekvence h (25-28) *** (24,25,26,27,28,29,2A, 2B, 2C, 2D)
MERIF MOVF 75,0; Konec glavnega stevca?
BTFSS 3,2
DN
ARI CAKAJ40; pocakaj 4ms yapmak konca stetja
COMF 7,0; precitaj vse Stevce
MOVWF 24
MOVF 0E, 0; TMR1L
MOVWF 25
MOVF 0F, 0; TMR1H
MOVWF 26
MOVF 76,0
MOVWF 27
MOVF 77,0
MOVWF 28
Movlw 4'tr; premakni Rezultat Stiri mesta h levo
MOVWF 29
MERIF1 RRF 24,1
RLF 25,1
RLF 26,1
RLF 27,1
RLF 28,1
DECFSZ 29,1
GOTO MERIF1
MOVF 25,0; zamenjaj staro Novo Med sabo
MOVWF 24
MOVF 2A, 0
MOVWF 25
MOVF 24,0
MOVWF 2A
MOVF 26,0; bajt 2
MOVWF 24
MOVF 2B, 0
MOVWF 26
MOVF 24,0
MOVWF 2B
MOVF 27,0; bajt 3
MOVWF 24
MOVF 2C, 0
MOVWF 27
MOVF 24,0
MOVWF 2C
MOVF 28,0; bajt 4
MOVWF 24
MOVF 2D, 0
MOVWF 28
MOVF 24,0
MOVWF 2D
MOVF 25,0; odstej novo-staro h (25-28)
SUBWF 2A, 0
MOVWF 25
BTFSC 3,0
GOTO MERIF2
INCF 26,1
BTFSS 3,2
GOTO MERIF2
INCF 27,1
BTFSC 3,2
INCF 28,1
MERIF2 MOVF 26,0; bajt 2
SUBWF 2B, 0
MOVWF 26
BTFSC 3,0
GOTO MERIF3
INCF 27,1
BTFSC 3,2
INCF 28,1
MERIF3 MOVF 27,0; bajt 3
SUBWF 2C, 0
MOVWF 27
BTFSS 3,0
INCF 28,1
MOVF 28,0; bajt 4
SUBWF 2D, 0
MOVWF 28
Movlw 0A; zacni novo meritev
MOVWF 75
DN

; *** Izpisi nacin delovanja MW, RF ali TTL ***
NACIN movlw 0C1; Naslov LCD druga vrstica 2.znak
ARI UKAZ
BTFSS 5,5; "MW:" izpis?
GOTO NACIN1
Movlw 4D; "M"
ARI ZNAK
Movlw 57; "W"
ARI ZNAK
Movlw 3A; ":"
ARI ZNAK
DN
NACIN1 BTFSS 5,4; "RF:" izpis?
GOTO NACIN2
Movlw 52; "R"
ARI ZNAK
Movlw 46; "F"
ARI ZNAK
Movlw 3A; ":"
ARI ZNAK
DN
NACIN2 movlw 54; "t" - "TTL" izpis
ARI ZNAK
Movlw 54, "T"
ARI ZNAK
Movlw 4C; "L"
ARI ZNAK
DN

; *** A / D pretvornik za jakost ***
Jakost BTFSC 1F, 2; pocakaj Konec A / D pretvorbe?
GOTO jakost
MOVF 5,0; prikaz vkljucen MW ali RF?
ANDLW 30
BTFSC 3,2
CLRF 1E
RRF 1E 0, 0-127 obmocje jakosti
ANDLW 7F
ARI PALICA
Movlw 85; ADCON0: 10 = ADCS1-0, 000 = CHS2-0, 1 = GO / YAPILDI, 0, 1 = ADON
BTFSS 5,5
Movlw 8D; ADCON0: 10 = ADCS1-0, 001 = CHS2-0, 1 = GO / YAPILDI, 0, 1 = ADON
MOVWF 1F
DN

; *** Jakost (W) kot palica 12 znakov 0-36 crtic *** (22,23)
PALICA MOVWF 22
Movlw 0C4; Naslov LCD druga vrstica 5.znak
ARI UKAZ
Movlw 0C; Zanka 12 znakov
MOVWF 23
PALICA1 movlw 20; praznina
DECF 22,1
BTFSC 22,7
GOTO PALICA2
Movlw 0; ENA crtica desno
DECF 22,1
BTFSC 22,7
GOTO PALICA2
Movlw 1; DVE crtici desno
DECF 22,1
BTFSC 22,7
GOTO PALICA2
Movlw 2 tri crtice
PALICA2 ARI ZNAK
DECFSZ 23,1
GOTO PALICA1
DN

; *** Izpisi vodoravne crtice cakanja ***
IZPURA movlw 80; Naslov LCD zacetek prve vrstice
ARI UKAZ
MOVF 75,0; doloci gornji znak
SUBLW 8A
ARI IZPURA1
ARI ZNAK
Movlw 0C0; Naslov LCD zacetek druge vrstice
ARI UKAZ
MOVF 75,0; doloci Spodnji Bur
SUBLW 85
ARI IZPURA1
ARI ZNAK
DN
IZPURA1 ADDLW 7F, Spodnja meja - 20 $ presledek
BTFSC 3,0
GOTO IZPURA2
movlw 20
DN
IZPURA2 ADDLW 0FC; Gornja meja - hayvan vodoravnih crtic 7 $
BTFSC 3,0
movlw 0
ADDLW 7
DN

; *** Zacetni napis ob vklopu *** (21)
ZNAPIS movlw 80; Naslov LCD zacetek prve vrstice
ARI UKAZ
Movlw 46; "F" - FrequencyCounter
ARI ZNAK
Movlw 72; "r"
ARI ZNAK
Movlw 65; "e"
ARI ZNAK
Movlw 71; "q"
ARI ZNAK
Movlw 75; "u"
ARI ZNAK
Movlw 65; "e"
ARI ZNAK
Movlw 6E; "n"
ARI ZNAK
Movlw 63; "c"
ARI ZNAK
Movlw 79; "y"
ARI ZNAK
Movlw 43; "C"
ARI ZNAK
Movlw 6F; "o"
ARI ZNAK
Movlw 75; "u"
ARI ZNAK
Movlw 6E; "n"
ARI ZNAK
Movlw 74; "t"
ARI ZNAK
Movlw 65; "e"
ARI ZNAK
Movlw 72; "r"
ARI ZNAK
Movlw 0C0; Naslov LCD zacetek druge vrstice
ARI UKAZ
Movlw 53; "S" - S53MV
ARI ZNAK
Movlw 35; "5"
ARI ZNAK
Movlw 33; "3"
ARI ZNAK
Movlw 4D; "M"
ARI ZNAK
Movlw 56; "V"
ARI ZNAK
Movlw 20; ""
ARI ZNAK
Movlw 30; "0" - 05.05.2007
ARI ZNAK
Movlw 35; "5"
ARI ZNAK
Movlw 2E, "."
ARI ZNAK
Movlw 30; "0"
ARI ZNAK
Movlw 35; "5"
ARI ZNAK
Movlw 2E, "."
ARI ZNAK
Movlw 32; "2"
ARI ZNAK
Movlw 30; "0"
ARI ZNAK
Movlw 30; "0"
ARI ZNAK
Movlw 37; "7"
ARI ZNAK
Movlw 0FA; cakanje priblizno 1s
MOVWF 21
NAPIS1 ARI CAKAJ40
ARI MERIF; merjenje frekvence
DECFSZ 21,1
GOTO NAPIS1
DN

; *** Vpisi posebne znake h CGRAM ***
CGRAM movlw 40, Naslov ZA CGRAM
ARI UKAZ
Movlw 10 ENA pokoncna crtica h desno 0 -
ARI ZNAK
movlw 10
ARI ZNAK
movlw 10
ARI ZNAK
movlw 10
ARI ZNAK
movlw 10
ARI ZNAK
movlw 10
ARI ZNAK
movlw 10
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 14; DVE pokoncni crtici h desno - 1
ARI ZNAK
movlw 14
ARI ZNAK
movlw 14
ARI ZNAK
movlw 14
ARI ZNAK
movlw 14
ARI ZNAK
movlw 14
ARI ZNAK
movlw 14
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 15 tri pokoncne crtice - 2
ARI ZNAK
movlw 15
ARI ZNAK
movlw 15
ARI ZNAK
movlw 15
ARI ZNAK
movlw 15
ARI ZNAK
movlw 15
ARI ZNAK
movlw 15
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 1F; ena pokoncna crtica dol - 3
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 1F; dve pokoncni crtici dol - 4
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 1F tri pokoncne crtice dol - 5
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 1F; Stiri pokoncne crtice dol - 6
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
Movlw 1F; hayvan pokoncnih crtic dol - 7
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 0
ARI ZNAK
movlw 1F
ARI ZNAK
movlw 1F
ARI ZNAK
DN

; *** Inicializacija HD44780 ***
INILCD movlw 38; fonksiyon seti
ARI UKAZ
ARI CAKAJ40
Movlw 38; fonksiyon seti
ARI UKAZ
Movlw 38; fonksiyon seti
ARI UKAZ
Movlw 8; kapal gsterilecek
ARI UKAZ
Movlw 1; net grntler
ARI UKAZ
ARI CAKAJ40
Movlw 6; giri modu seti
ARI UKAZ
Movlw 0C; grntlemek
ARI UKAZ
ARI CGRAM; vpisi posebne znake v CGRAM
DN

; *** Cakaj priblizno 100US (takt 20MHz) ***
CAKAJP movlw 7C
CAKAJP1 ADDLW 0FF; Zanka 4 ukazi
BTFSS 3,2
GOTO CAKAJP1
DN

; *** Cakanje 4ms *** (20)
CAKAJ40 movlw 28
MOVWF 20
CAKAJ41 ARI CAKAJP
DECFSZ 20,1
GOTO CAKAJ41
DN

; *** Znak ali ukaz iz h HD44780 ***
ZNAK BSF 7,6; Postavi RC6 RS = 1 za znak
GOTO ZNUKAZ
UKAZ BCF 7,6; Postavi RC6 RS = 0 za ukaz
ZNUKAZ MOVWF 6; premakni bajt podatkov h RB0-7
NOP
NOP
NOP
NOP
BSF 7,7; impulz E na RC7
NOP
NOP
NOP
NOP
BCF 7,7
ARI CAKAJP; cakanje 100US
DN

; *** Nastavi konfiguracijo pika 16F876 / 16F876A ***
ORG 2007; Naslov konfiguracijske besede
DW 3972
; 3: 11 = / CP = kapal
9: 1 = / DEBUG = kapal, 00 = WRT10 = kapal, 1 = / CPD = kapal
; 7: 0 = LVP, 1 = BODEN = zerinde, 11 = / CP = kapal
; 2: 0 = / PWRTE = ak, 0 = WDTE = kapal, 10 = HSoscillator
SON

; *** Konec programa ***